package com.sptpc.stu.common.response.impl;

import com.sptpc.stu.common.response.IStatus;
import lombok.Getter;

/**
 * 通用状态码
 */
@Getter
public enum Status implements IStatus {
    /**
     * 操作成功
     */
    SUCCESS(200, "操作成功"),

    /**
     * 操作异常
     */
    ERROR(500, "操作异常"),

    /**
     * 密码登录失败
     */
    LOGIN_PASSWORD_FAIL(5001, "密码登录失败"),


    /**
     * 用户不存在
     */
    USER_NOT_FOUND(5002, "该用户不存在"),


    /**
     * 上传失败
     */
    UPLOAD_ERROR(500, "文件上传出错"),


    /**
     * 退出成功
     */
    LOGOUT(200, "退出成功"),

    /**
     * 退出失败
     */
    LOGOUT_FAIL(500, "退出失败"),

    /**
     * 请先登录
     */
    UNAUTHORIZED(401, "请先登录"),

    /**
     * 暂无权限访问
     */
    ACCESS_DENIED(403, "权限不足, 不允许访问"),

    /**
     * 请求不存在
     */
    REQUEST_NOT_FOUND(404, "请求不存在"),

    /**
     * 请求方式不支持
     */
    HTTP_BAD_METHOD(405, "请求方式不支持"),

    /**
     * 请求异常！
     */
    BAD_REQUEST(400, "请求异常"),

    /**
     * 参数不匹配！
     */
    PARAM_NOT_MATCH(400, "参数不匹配"),

    /**
     * 参数不能为空
     */
    PARAM_NOT_NULL(400, "参数不能为空");

    /**
     * 状态码
     */
    private Integer code;

    /**
     * 返回信息
     */
    private String message;

    Status(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public static Status fromCode(Integer code) {
        Status[] statuses = Status.values();
        for (Status status : statuses) {
            if (status.getCode()
                    .equals(code)) {
                return status;
            }
        }
        return SUCCESS;
    }

    @Override
    public String toString() {
        return String.format(" Status:{code=%s, message=%s} ", getCode(), getMessage());
    }

}
